home *** CD-ROM | disk | FTP | other *** search
/ Carousel Volume 2 #1 / carousel.iso / mactosh / hc / homeimpr.sit / Home Improvements / card_2340.txt < prev    next >
Text File  |  1988-09-19  |  6KB  |  209 lines

  1. -- card: 2340 from stack: in
  2. -- bmap block id: 0
  3. -- flags: 0000
  4. -- background id: 3490
  5. -- name: FieldHotFingers
  6.  
  7.  
  8. -- part 1 (button)
  9. -- low flags: 00
  10. -- high flags: 8003
  11. -- rect: left=459 top=134 right=157 bottom=512
  12. -- title width / last selected line: 0
  13. -- icon id / first selected line: 0 / 0
  14. -- text alignment: 1
  15. -- font id: 0
  16. -- text size: 12
  17. -- style flags: 0
  18. -- line height: 16
  19. -- part name: show it
  20. ----- HyperTalk script -----
  21. on mouseUp
  22.   push card
  23.   go to card id 8041
  24. end mouseUp
  25.  
  26.  
  27.  
  28.  
  29. -- part contents for background part 1
  30. ----- text -----
  31. FieldHotFingers
  32.  
  33. -- part contents for background part 3
  34. ----- text -----
  35. -- This is the command to be invoked in the "on mouseUp" script of the
  36. -- field (the field must be locked, of course).
  37.  
  38. on fieldHotFingers
  39.   put the optionKey into oKy
  40.   put the shiftKey into sKy
  41.   put the target into source
  42.   if (oKy is "down") AND (sKy is "down") then
  43.     showHotFingers source
  44.     exit fieldHotFingers
  45.   end if
  46.   -- put "char" into spec
  47.   put "word" into spec -- make this Word sensitive
  48.   put fieldClick(spec) into code
  49.   if sKy is "down" then
  50.     loadHotFinger code,source
  51.   else
  52.     hotFinger code,source
  53.   end if
  54. end fieldHotFingers
  55.  
  56. -- This will tell us what character(s) were selected.
  57. function fieldClick var
  58.   set the lockText of the target to false
  59.   if var="word" then click at the mouseLoc
  60.   click at the mouseLoc
  61.   put the selectedChunk into spott
  62.   set the lockText of the target to true
  63.   click at -1,-1 -- remove the selection hilite or insertion point
  64.   put word 2 of spott into cNum
  65.   if var="word" then
  66.     put word 4 of spott into cNum2
  67.   else
  68.     delete word 3 to 4 of spott
  69.     put cNum into cNum2
  70.   end if
  71.   if cnum2<cnum then
  72.     put cnum2 into cnum
  73.     put cnum into word 2 of spott
  74.   end if
  75.   put "put " before spott
  76.   put " into theChar" after spott
  77.   do spott
  78.   return cnum & "," & cnum2 & "," & theChar
  79. end fieldClick
  80.  
  81. -- This will check to see it the selected characters are in a HotFingers
  82. -- item.
  83. on hotFinger
  84.   put param(1) into cNum
  85.   put item 2 of cNum into cNum2
  86.   put item 1 of cNum into cNum
  87.   put param(2) into fNam
  88.   put getHotLines(fNam) into workarea
  89.   put the number of lines of workArea into howMany
  90.   repeat with ii = 1 to howMany
  91.     put line ii of workArea into theLine
  92.     put offset(")",theLine) into spott
  93.     subtract 1 from spott
  94.     put char 5 to spott of theLine into theRange
  95.     put item 1 of theRange into test1
  96.     put item 2 of theRange into test2
  97.     if test2<test1 then put test1 into test2
  98.     if (cNum>=test1) AND (cNum2<=test2) then
  99.       add 1 to spott
  100.       delete char 1 to spott of theLine
  101.       do theLine
  102.     end if
  103.   end repeat
  104. end hotFinger
  105.  
  106. -- This will let the user define a HotFingers area.
  107. on loadHotFinger
  108.   set the cursor to 4
  109.   put param(1) into cNum
  110.   put item 2 of cNum into cNum2
  111.   put item 1 of cNum into cNum
  112.   put param(2) into fNam
  113.   put "put the script of" && fNam && "into workArea" into dom
  114.   do dom
  115.   put the number of lines of workArea into howMany
  116.   put "beep 5" into theCmd
  117.   repeat with ii = 1 to howMany
  118.     put line ii of workArea into theLine
  119.     if char 1 of theLine<>"-" then exit repeat
  120.     put offset(")",theLine) into spott
  121.     if spott<1 then exit repeat
  122.     subtract 1 from spott
  123.     put char 5 to spott of theLine into theRange
  124.     put item 1 of theRange into test1
  125.     put item 2 of theRange into test2
  126.     if test2<test1 then put test1 into test2
  127.     if (cNum>=test1) AND (cNum2<=test2) then
  128.       add 1 to spott
  129.       delete char 1 to spott of theLine
  130.       answer "That is already contained in " & theRange with ┬¼
  131.       "Show code" OR "Replace" OR "Cancel"
  132.       if it is "Show code" then
  133.         answer theLine with "Remove" OR "Replace" OR "Cancel"
  134.       end if
  135.       if it is "Cancel" then exit loadHotFinger
  136.       delete line ii of workArea
  137.       if it is "remove" then
  138.         put empty into theCmd
  139.       else
  140.         put theLine into theCmd
  141.       end if
  142.       exit repeat
  143.     end if
  144.   end repeat
  145.   if theCmd is NOT empty then
  146.     ask "What command:" with theCmd
  147.     if it is empty then exit loadHotFinger
  148.     put it into theLine
  149.     put "-- (" & cNum & "," & cNum2 & ") " before theLine
  150.     put theLine & return before workArea
  151.   end if
  152.   put "set the script of" && fNam && "to workArea" into dom
  153.   do dom
  154. end loadHotFinger
  155.  
  156. -- This gets the command lines from the field script.
  157. function getHotLines trg
  158.   put trg into fNam
  159.   put "put the script of" && fNam && "into workArea" into dom
  160.   do dom
  161.   put the number of lines of workArea into howMany
  162.   put empty into rslt
  163.   repeat with ii = 1 to howMany
  164.     if char 1 of line ii of workArea <> "-" then exit repeat
  165.     if line ii of workArea contains ")" then
  166.       put line ii of workarea into line ii of rslt
  167.     else
  168.       exit repeat
  169.     end if
  170.   end repeat
  171.   return rslt
  172. end getHotLines
  173.  
  174. -- This will cycle through the defined HotFingers
  175. on showHotFingers
  176.   put param(1) into fNam
  177.   put getHotLines(fNam) into workarea
  178.   put the number of lines of workArea into howMany
  179.   put 1 into ii
  180.   repeat forever
  181.     if the optionKey is "up" then exit repeat
  182.     if the shiftKey is "up" then exit repeat
  183.     put line ii of workArea into theLine
  184.     put offset(")",theLine) into spott
  185.     subtract 1 from spott
  186.     put char 5 to spott of theLine into theRange
  187.     put item 1 of theRange into test1
  188.     put item 2 of theRange into test2
  189.     if test2<test1 then put test1 into test2
  190.     set the lockText of fNam to false
  191.     put "char " & test1 & " to " & test2 & " of " & fNam into chunkExpr
  192.     select chunkExpr
  193.     set the lockText of the target to true
  194.     wait 20 ticks
  195.     add 1 to ii
  196.     if ii>howMany then put 1 into ii
  197.   end repeat
  198.   click at -1,-1 -- remove the selection hilite or insertion point
  199. end showHotFingers
  200.  
  201. -- part contents for background part 5
  202. ----- text -----
  203. 8/29/88 13:39
  204.  
  205. -- part contents for background part 4
  206. ----- text -----
  207. FieldHotFingers is a non-XCMD implementation of "hot" spots in a locked text field, i.e. areas of text that can be defined to act as buttons.  This works even if the field is scrolled or if it's size is changed.  However, if the actual text is changed, then the pointers to the "hot" areas will still point to the original locations.
  208.  
  209. Note: this tool requires HyperCard version 1.2 or greater.